/**************************************************************************
* @ file    : imi_crypto.h
* @ author  : 
* @ version : 0.9
* @ date    : 
* @ brief   : 封装常用的crypto函数定义
* @Copyright (c) 2016  chuangmi inc.
***************************************************************************/ 
 
#ifndef _IMI_CRYPTO_H_
#define _IMI_CRYPTO_H_

#include <stddef.h>
#include <stdint.h>
#include <stdbool.h>


#define C25519_KEY_SIZE         32  // curve25519的key长度



// 向buffer中填充随机uint8_t（通常用于key的生成）
// @buffer [out] 需要填充的buffer
// @len    [in]  buffer的长度
void imi_fill_rand_bytes(uint8_t *buffer, int len);

// 向buffer中填充随机可读字符, 最后一个字符填\0
// @buffer [out] 需要填充的buffer
// @len    [in]  buffer的长度
void imi_fill_rand_text(char *buffer, int len);

//-----------------------------------------------------------------------
//  curve25519 密钥交换
//  
//-----------------------------------------------------------------------

// 产生curve25519的随机密钥对，public和secret
// @rand_bytes [in]  用于产生keypair的随机字串，长度必须为C25519_KEY_SIZE
// @pub_key    [out] 公钥缓冲区，长度必须为C25519_KEY_SIZE
// @sec_key    [out] 私钥缓冲区，长度必须为C25519_KEY_SIZE
void c25519_generate_keypair(const uint8_t rand_bytes[], uint8_t pub_key[], uint8_t sec_key[]);

// 计算共享密钥。所有密钥长度都必须为C25519_KEY_SIZE
// @his_pub [in]  对方的公钥
// @my_sec  [in]  我方的公钥
// @share   [out] 计算出来的共享密钥
void c25519_calculate_share_key(const uint8_t his_pub[], const uint8_t my_sec[], uint8_t share[]);

#endif //_IMI_CRYPTO_H_
